/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.controler.jdbc;

import com.camachosanchez.bean.*;
import com.camachosanchez.util.ConexionSQL;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Zully
 */
public class VehiculosJdbcControler {
    
    public List<Vehiculos> findAll() {
        List<Vehiculos> lst = new ArrayList<Vehiculos>();
        Connection cn = ConexionSQL.obtenerConexion();
        Statement st;
        try {
            st = cn.createStatement();
//            ResultSet rsId = st.executeQuery("SELECT IFNULL(MIN(v.id),0) FROM vehiculos v;");
//            int primerId = 0;
//            if (rsId.first()) {
//                primerId = rsId.getInt(1);
//            }
            ResultSet rs = st.executeQuery("select vehiculos.id, placa, serie_chasis, numero_motor, fecha_registro, capacidad_tanque, "
                    + "fecha_compra, num_factura_compra, marcas_vehiculo.nombre, distribuidores_vehiculos.nombre, tipos_combustible.nombre, "
                    + "flotillas.nombre, tipos_eje.nombre, maxima_capacidad_carga_peso, maxima_capacidad_carga_volumen, tipos_vehiculo.nombre, cod_barras "
                    + "FROM vehiculos LEFT JOIN marcas_vehiculo on vehiculos.id_marca=marcas_vehiculo.id "
                    + "LEFT JOIN distribuidores_vehiculos on vehiculos.id_distribuidor=distribuidores_vehiculos.id "
                    + "LEFT JOIN tipos_combustible on vehiculos.id_combustible=tipos_combustible.id "
                    + "LEFT JOIN flotillas on vehiculos.id_flotilla=flotillas.id "
                    + "LEFT JOIN tipos_eje on vehiculos.id_tipo_eje=tipos_eje.id "
                    + "LEFT JOIN tipos_vehiculo on vehiculos.id_tipo=tipos_vehiculo.id "
                    + "where vehiculos.estado=1 order by vehiculos.cod_barras;");
                    //+ "where vehiculos.estado=1 AND ((CAST(vehiculos.id AS SIGNED) - " + primerId + ") < 8) LIMIT 0,8;");
            while (rs.next()) {
                Vehiculos v = new Vehiculos();
                v.setId(rs.getInt(1));
                v.setPlaca(rs.getString(2));
                v.setSerieChasis(rs.getString(3));
                v.setNumeroMotor(rs.getString(4));
                v.setFechaRegistro(rs.getDate(5));
                v.setCapacidadTanque(rs.getString(6));
                v.setFechaCompra(rs.getDate(7));
                v.setNumFacturaCompra(rs.getString(8));
                MarcasVehiculo marca = new MarcasVehiculo();
                marca.setNombre(rs.getString(9));
                v.setIdMarca(marca);
                DistribuidoresVehiculos distribuidor = new DistribuidoresVehiculos();
                distribuidor.setNombre(rs.getString(10));
                v.setIdDistribuidor(distribuidor);
                TiposCombustible combustible = new TiposCombustible();
                combustible.setNombre(rs.getString(11));
                v.setIdCombustible(combustible);
                Flotillas flota = new Flotillas();
                flota.setNombre(rs.getString(12));
                v.setIdFlotilla(flota);
                TiposEje eje = new TiposEje();
                eje.setNombre(rs.getString(13));
                v.setIdTipoEje(eje);
                v.setMaximaCapacidadCargaPeso(rs.getFloat(14));
                v.setMaximaCapacidadCargaVolumen(rs.getFloat(15));
                TiposVehiculo tipo = new TiposVehiculo();
                tipo.setNombre(rs.getString(16));
                v.setCodBarras(rs.getString(17));
                v.setIdTipo(tipo);
                lst.add(v);
            }
            rs.close();
            st.close();
            cn.close();
        } catch (SQLException ex) {
            Logger.getLogger(VehiculosJdbcControler.class.getName()).log(Level.SEVERE, null, ex);
        }
        return lst;
    }
    
    public byte eliminarVehiculo(int id) {
        byte estado = 0;
        try {
            Connection cn = ConexionSQL.obtenerConexion();
            CallableStatement sp = cn.prepareCall("{ call eliminar_vehiculo(?) }");
            sp.setInt("idVehiculo", id);
            ResultSet rs = sp.executeQuery();
            if(rs.next()){
                estado = rs.getByte(1);
            }
            rs.close();
            sp.close();
            cn.close();
        } catch (SQLException ex) {
            Logger.getLogger(VehiculosJdbcControler.class.getName()).log(Level.SEVERE, null, ex);
        }
        return estado;
    }
    
    public boolean existeVehiculo(String placa) {
        boolean existe = false;
        Connection cn = ConexionSQL.obtenerConexion();
        try {
            Statement st = cn.createStatement();
            ResultSet rs = st.executeQuery("SELECT id FROM vehiculos where placa='" + placa + "' AND estado = 1;");
            if (rs.first()) {
                existe = true;
            }
            rs.close();
            st.close();
            cn.close();
        } catch (Exception e) {
            Logger.getLogger(VehiculosJdbcControler.class.getName()).log(Level.SEVERE, null, e);
        }
        return existe;
    }
}
